package com.atguigu.schedule.mapper;

import com.atguigu.schedule.pojo.FaceDetectionRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 人脸检测记录Mapper接口
 * 
 * @author atguigu
 * @since 2024
 */
@Mapper
public interface FaceDetectionRecordMapper {
    
    /**
     * 插入检测记录
     * 
     * @param record 检测记录
     * @return 影响行数
     */
    int insert(FaceDetectionRecord record);
    
    /**
     * 根据ID查询检测记录
     * 
     * @param id 记录ID
     * @return 检测记录
     */
    FaceDetectionRecord selectById(@Param("id") Long id);
    
    /**
     * 根据用户名查询检测记录（分页）
     * 
     * @param username 用户名
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 检测记录列表
     */
    List<FaceDetectionRecord> selectByUsernameWithPaging(@Param("username") String username, 
                                                        @Param("offset") int offset, 
                                                        @Param("limit") int limit);
    
    /**
     * 根据用户名和时间范围查询检测记录（分页）
     * 
     * @param username 用户名
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 检测记录列表
     */
    List<FaceDetectionRecord> selectByUsernameAndTimeRangeWithPaging(@Param("username") String username,
                                                                     @Param("startTime") LocalDateTime startTime,
                                                                     @Param("endTime") LocalDateTime endTime,
                                                                     @Param("offset") int offset,
                                                                     @Param("limit") int limit);
    
    /**
     * 根据时间范围查询检测记录（分页）
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 检测记录列表
     */
    List<FaceDetectionRecord> selectByTimeRangeWithPaging(@Param("startTime") LocalDateTime startTime,
                                                         @Param("endTime") LocalDateTime endTime,
                                                         @Param("offset") int offset,
                                                         @Param("limit") int limit);
    
    /**
     * 统计指定用户的检测次数
     * 
     * @param username 用户名
     * @return 检测次数
     */
    long countByUsername(@Param("username") String username);
    
    /**
     * 获取指定用户的最新检测记录
     * 
     * @param username 用户名
     * @return 最新检测记录
     */
    FaceDetectionRecord selectLatestByUsername(@Param("username") String username);
    
    /**
     * 获取所有不重复的用户名
     * 
     * @return 用户名列表
     */
    List<String> selectDistinctUsernames();
    
    /**
     * 更新检测记录
     * 
     * @param record 检测记录
     * @return 影响行数
     */
    int update(FaceDetectionRecord record);
    
    /**
     * 删除检测记录
     * 
     * @param id 记录ID
     * @return 影响行数
     */
    int deleteById(@Param("id") Long id);
    
    /**
     * 查询所有检测记录
     * 
     * @return 检测记录列表
     */
    List<FaceDetectionRecord> selectAll();
}
